using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._MaritimeTools._S._100
{
    /// <summary>
    /// <para>Convert S-57 to S-101 Cell</para>
    /// <para>Converts the S-57 vector product for storing nautical charting data to the new vector S-101 format.</para>
    /// <para>将用于存储航海图数据的 S-57 矢量乘积转换为新的矢量 S-101 格式。</para>
    /// </summary>    
    [DisplayName("Convert S-57 to S-101 Cell")]
    public class ConvertS57ToS101 : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ConvertS57ToS101()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_feature_catalogue">
        /// <para>S-100 Feature Catalogue</para>
        /// <para>The S-101 feature catalogue (XML document) from the International Hydrographic Organization (IHO) containing the schema of the features, attributes, and relationships used for encoding the hydrographic data in the S-101 cells.</para>
        /// <para>国际水文组织 （IHO） 的 S-101 要素目录（XML 文档），其中包含用于对 S-101 像元中的水文数据进行编码的要素、属性和关系的方案。</para>
        /// </param>
        /// <param name="_in_config_file">
        /// <para>Configuration File</para>
        /// <para>The input XML file that can be used to customize some aspects of the conversion process.</para>
        /// <para>可用于自定义转换过程的某些方面的输入 XML 文件。</para>
        /// </param>
        /// <param name="_input_s57">
        /// <para>Input S-57 (File or Folder)</para>
        /// <para>The input S-57 file with a .000 extension or a CATALOG.031 file that references a collection of S-57 files.</para>
        /// <para>扩展名为 .000 的输入 S-57 文件或引用 S-57 文件集合的 CATALOG.031 文件。</para>
        /// </param>
        /// <param name="_out_location">
        /// <para>Output Location</para>
        /// <para>The directory where the converted cell will be written.</para>
        /// <para>将写入转换后的单元格的目录。</para>
        /// </param>
        public ConvertS57ToS101(object _in_feature_catalogue, object _in_config_file, object _input_s57, object _out_location)
        {
            this._in_feature_catalogue = _in_feature_catalogue;
            this._in_config_file = _in_config_file;
            this._input_s57 = _input_s57;
            this._out_location = _out_location;
        }
        public override string ToolboxName => "Maritime Tools";

        public override string ToolName => "Convert S-57 to S-101 Cell";

        public override string CallName => "maritime.ConvertS57ToS101";

        public override List<string> AcceptEnvironments => ["S100FeatureCatalogueFile"];

        public override object[] ParameterInfo => [_in_feature_catalogue, _in_config_file, _input_s57, _out_location, _out_s101];

        /// <summary>
        /// <para>S-100 Feature Catalogue</para>
        /// <para>The S-101 feature catalogue (XML document) from the International Hydrographic Organization (IHO) containing the schema of the features, attributes, and relationships used for encoding the hydrographic data in the S-101 cells.</para>
        /// <para>国际水文组织 （IHO） 的 S-101 要素目录（XML 文档），其中包含用于对 S-101 像元中的水文数据进行编码的要素、属性和关系的方案。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("S-100 Feature Catalogue")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_feature_catalogue { get; set; }


        /// <summary>
        /// <para>Configuration File</para>
        /// <para>The input XML file that can be used to customize some aspects of the conversion process.</para>
        /// <para>可用于自定义转换过程的某些方面的输入 XML 文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Configuration File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_config_file { get; set; }


        /// <summary>
        /// <para>Input S-57 (File or Folder)</para>
        /// <para>The input S-57 file with a .000 extension or a CATALOG.031 file that references a collection of S-57 files.</para>
        /// <para>扩展名为 .000 的输入 S-57 文件或引用 S-57 文件集合的 CATALOG.031 文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input S-57 (File or Folder)")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _input_s57 { get; set; }


        /// <summary>
        /// <para>Output Location</para>
        /// <para>The directory where the converted cell will be written.</para>
        /// <para>将写入转换后的单元格的目录。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Location")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_location { get; set; }


        /// <summary>
        /// <para>Output S-101 Data</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output S-101 Data")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_s101 { get; set; }


        public ConvertS57ToS101 SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}